Package org.python.pydev.parser.fastparser

Source Code of org.python.pydev.parser.fastparser.FastParserTest

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.parser.fastparser;

import java.util.List;

import junit.framework.TestCase;

import org.eclipse.jface.text.Document;
import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.ast.ClassDef;
import org.python.pydev.parser.jython.ast.stmtType;
import org.python.pydev.parser.visitors.NodeUtils;

/**
* Note: tests don't have the correct syntax on purpose!
*
* @author Fabio
*/
public class FastParserTest extends TestCase {

    public static void main(String[] args) {
        try {
            FastParserTest test = new FastParserTest();
            test.setUp();
            test.testCython1();
            test.tearDown();
            junit.textui.TestRunner.run(FastParserTest.class);

        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    public void testGettingClassOrFunc() throws Exception {
        Document doc = new Document();
        doc.set("def bar(a):\n" +
                "\n" +
                "class \\\n" +
                "  Bar\n" +
                "    def mm\n" +
                "def\n" + //no space after
                "class\n" + //no space after
                "class \n" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(4, all.size());
        check(all, 0, 1, 1, 1, 5);
        check(all, 1, 3, 1, 3, 7);
        check(all, 2, 5, 5, 5, 9);
        check(all, 3, 8, 1, 8, 7);
    }

    public void testGettingClass() throws Exception {
        Document doc = new Document();
        doc.set("class Foo:\n" +
                "\n" +
                "class Bar(object):\n" +
                "\n" +
                "    class My\n" +
                "'''class Dont\n"
                +
                "class Dont2\n" +
                "\n" +
                "'''\n" +
                "class My2:\n" +
                "" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(4, all.size());
        check(all, 0, 1, 1, 1, 7);
        check(all, 1, 3, 1, 3, 7);
        check(all, 2, 5, 5, 5, 11);
        check(all, 3, 10, 1, 10, 7);

        stmtType found = FastParser.firstClassOrFunction(doc, 1, true, false);
        checkNode(3, 1, 3, 7, (ClassDef) found);

        found = FastParser.firstClassOrFunction(doc, 0, true, false);
        checkNode(1, 1, 1, 7, (ClassDef) found);

        found = FastParser.firstClassOrFunction(doc, 5, true, false);
        checkNode(10, 1, 10, 7, (ClassDef) found);

        found = FastParser.firstClassOrFunction(doc, 5, false, false);
        checkNode(5, 5, 5, 11, (ClassDef) found);

        found = FastParser.firstClassOrFunction(doc, -1, false, false);
        assertNull(found);

        found = FastParser.firstClassOrFunction(doc, 15, true, false);
        assertNull(found);

        found = FastParser.firstClassOrFunction(doc, 15, false, false);
        checkNode(10, 1, 10, 7, (ClassDef) found);

    }

    public void testGettingClass2() throws Exception {
        Document doc = new Document();
        doc.set("def GetClassesAndData():\n" +
                "    curr_widget_class = 10\n" +
                "\n" +
                "" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(1, all.size());
    }

    public void testGettingClass3() throws Exception {
        Document doc = new Document();
        doc.set("class A(object):\n" +
                "    curr_widget_class = 10\n" +
                "\n" +
                "" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(1, all.size());
    }

    public void testGettingClass4() throws Exception {
        Document doc = new Document();
        doc.set("\nclass A(object):\n" +
                "    curr_widget_class = 10\n" +
                "\n" +
                "" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(1, all.size());
    }

    public void testGettingMethod() throws Exception {
        Document doc = new Document();
        doc.set("def a():\n" +
                "    curr_widget_def = 10\n" +
                "\n" +
                "" +
                "");

        List<stmtType> all = FastParser.parseClassesAndFunctions(doc);
        assertEquals(1, all.size());
    }

    public void testBackwardsUntil1stGlobal() throws Exception {
        Document doc = new Document();
        doc.set("def b():\n" +
                "    pass\n" +
                "\n" +
                "def a():\n" +
                "    curr_widget_def = 10\n" +
                "\n" +
                "" +
                "");

        List<stmtType> stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, 4);
        assertEquals(1, stmts.size());
        assertEquals("a", NodeUtils.getRepresentationString(stmts.get(0)));
    }

    public void testCython1() throws Exception {
        Document doc = new Document();
        doc.set("cdef extern int f1()\n" +
                "" +
                "");
        List<stmtType> stmts = FastParser.parseCython(doc);
        assertEquals(1, stmts.size());
        assertEquals("extern int f1()", NodeUtils.getRepresentationString(stmts.get(0)));
    }

    public void testCython2() throws Exception {
        Document doc = new Document();
        doc.set("ctypedef enum parrot_state:\n" +
                "" +
                "");
        List<stmtType> stmts = FastParser.parseCython(doc);
        assertEquals(1, stmts.size());
        assertEquals("enum parrot_state:", NodeUtils.getRepresentationString(stmts.get(0)));
    }

    public void testBackwardsUntil1stGlobal2() throws Exception {
        Document doc = new Document();
        doc.set("def b():\n" +
                "    pass\n" +
                "\n" +
                "def a():\n" +
                "    def f():\n" + //4
                "        curr_widget_def = 10\n" + //5
                "    def c():\n" + //6
                "        curr_widget_def = 10\n" + //7
                "    a = 10\n" + //8
                "    print a" + //9
                "" +
                "");

        List<stmtType> stmts;

        for (int i = 8; i <= 9; i++) {
            //8 and 9
            stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, i);
            assertEquals(1, stmts.size());
            assertEquals("a", NodeUtils.getRepresentationString(stmts.get(0)));
        }

        for (int i = 6; i <= 7; i++) {
            //6 and 7
            stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, i);
            assertEquals(2, stmts.size());
            assertEquals("a", NodeUtils.getRepresentationString(stmts.get(0)));
            assertEquals("c", NodeUtils.getRepresentationString(stmts.get(1)));
        }

        for (int i = 4; i <= 5; i++) {
            //4 and 5
            stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, i);
            assertEquals(2, stmts.size());
            assertEquals("a", NodeUtils.getRepresentationString(stmts.get(0)));
            assertEquals("f", NodeUtils.getRepresentationString(stmts.get(1)));
        }

        //3
        stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, 3);
        assertEquals(1, stmts.size());
        assertEquals("a", NodeUtils.getRepresentationString(stmts.get(0)));

        for (int i = 0; i <= 2; i++) {
            //2, 1 and 0
            stmts = FastParser.parseToKnowGloballyAccessiblePath(doc, i);
            assertEquals(1, stmts.size());
            assertEquals("b", NodeUtils.getRepresentationString(stmts.get(0)));
        }
    }

    private void check(List<stmtType> all, int position, int classBeginLine, int classBeginCol, int nameBeginLine,
            int nameBeginCol) {
        SimpleNode node = all.get(position);
        checkNode(classBeginLine, classBeginCol, nameBeginLine, nameBeginCol, node);
    }

    private void checkNode(int classBeginLine, int classBeginCol, int nameBeginLine, int nameBeginCol, SimpleNode node) {
        assertEquals(classBeginLine, node.beginLine);
        assertEquals(classBeginCol, node.beginColumn);

        SimpleNode name = NodeUtils.getNameTokFromNode(node);
        assertEquals(nameBeginLine, name.beginLine);
        assertEquals(nameBeginCol, name.beginColumn);
    }

}
TOP

Related Classes of org.python.pydev.parser.fastparser.FastParserTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.